# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/3 16:12 
@Author  : ZhangShenao 
@File    : string_join.py 
@Desc    : 字符串拼接相关操作

自从Python2.5开始,对字符串的+拼接操作进行了优化
每次处理字符串的拼接操作时(str1 += str2),Python首先会检测str1还有没有其他的引用
如果没有的话,就会尝试原地扩充字符串buffer的大小,而不是重新分配一块内存来创建新的字符串并拷贝

如果字符串拼接的次数较少时,用+=更快
但是如果次数很大时,使用join()函数稍快一些

"""
import datetime


def join_str_by_add(count: int):
    """使用+运算符拼接字符串"""
    start_time = datetime.datetime.now().timestamp()
    s = ''
    for i in range(count):
        s += str(i)
    end_time = datetime.datetime.now().timestamp()
    print(f'[join_str_by_add] cost time: {round(end_time - start_time, 2)}s')


def join_str_by_join(count: int):
    """使用join函数拼接字符串"""
    start_time = datetime.datetime.now().timestamp()
    l = []
    for i in range(count):
        l.append(str(i))

    # 使用str的join()函数,可以将一个Iterable对象中的所有元素按照指定的分隔符拼接起来
    s = ''.join(l)
    end_time = datetime.datetime.now().timestamp()
    print(f'[join_str_by_join] cost time: {round(end_time - start_time, 2)}s')


def join_str_by_join_map(count: int):
    """使用join+map函数拼接字符串"""
    start_time = datetime.datetime.now().timestamp()
    s = ''.join(map(str, range(count)))
    end_time = datetime.datetime.now().timestamp()
    print(f'[join_str_by_join_map] cost time: {round(end_time - start_time, 2)}s')


if __name__ == '__main__':
    c = 10000000
    join_str_by_add(c)
    print('-------------------')
    join_str_by_join(c)
    print('-------------------')
    join_str_by_join_map(c)

    # 输出结果:
    # [join_str_by_add] cost time: 1.05s
    # -------------------
    # [join_str_by_join] cost time: 0.75s
    # -------------------
    # [join_str_by_join_map] cost time: 0.9s
